
package com.jf.cloud.multishop.mapper;

import com.jf.cloud.api.multishop.bo.EsShopDetailBO;
import com.jf.cloud.api.multishop.bo.ShopSimpleBO;
import com.jf.cloud.api.multishop.vo.ShopDetailVO;
import com.jf.cloud.multishop.dto.ShopDetailDTO;
import com.jf.cloud.multishop.dto.ShopSearchDTO;
import com.jf.cloud.multishop.model.ShopDetail;
import com.jf.cloud.multishop.vo.ShopDetailAppVO;
import com.jf.cloud.multishop.vo.ShopHeadInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 店铺详情
 *
 * @author zz
 * @date 2020-12-05 15:50:25
 */
public interface ShopDetailMapper {

    /**
     * 获取店铺详情列表
     *
     * @param shopDetailDTO 店铺搜索数据
     * @return 店铺详情列表
     */
    List<ShopDetailVO> list(@Param("shopDetail") ShopDetailDTO shopDetailDTO);

    /**
     * 根据店铺详情id获取店铺详情
     *
     * @param shopId 店铺详情id
     * @return 店铺详情
     */
    ShopDetailVO getByShopId(@Param("shopId") Long shopId);

    /**
     * 保存店铺详情
     *
     * @param shopDetail 店铺详情
     */
    void save(@Param("shopDetail") ShopDetail shopDetail);

    /**
     * 更新店铺详情
     *
     * @param shopDetail 店铺详情
     */
    void update(@Param("shopDetail") ShopDetail shopDetail);

    /**
     * 根据店铺详情id删除店铺详情
     *
     * @param shopId
     */
    void deleteById(@Param("shopId") Long shopId);

    /**
     * 根据店铺id列表，获取店铺信息
     * @param shopIds 店铺id列表
     * @return 店铺列表
     */
    List<ShopDetail> listByShopIds(@Param("shopIds") List<Long> shopIds);

    /**
     * 根据店铺id获取店铺详情
     *
     * @param shopId 店铺详情id
     * @return 店铺详情
     */
    ShopDetailVO getShopByShopId(Long shopId);

    /**
     * 店铺搜索列表
     *
     * @param shopDetailDTO
     * @return
     */
    List<ShopDetailAppVO> shopSearchList(@Param("shopDetail") ShopDetailDTO shopDetailDTO);

    /**
     * 店铺5公里范围内商家列表
     *
     * @param shopLng
     * @param shopLat
     * @return
     */
    List<Map<String,Object>> getShopIdByNear(@Param("shopLng") Double shopLng, @Param("shopLat") Double shopLat);

    /**
     * 根据ID集合查找商家列表
     *
     * @param shopId
     * @return
     */
    ShopDetailAppVO getShopListById(@Param("shopId") Long shopId);
    /**
     * 统计该店铺名被其他用户使用的数量
     *
     * @param shopName
     * @param shopId
     * @return
     */
    int countShopName(@Param("shopName") String shopName, @Param("shopId") Long shopId);

    /**
     * 改变店铺状态
     *
     * @param shopId
     * @param shopStatus
     */
    void changeShopStatus(@Param("shopId") Long shopId, @Param("shopStatus") Integer shopStatus);

    /**
     * 获取店铺信息及扩展信息
     *
     * @param shopId
     * @return
     */
    EsShopDetailBO shopExtensionData(@Param("shopId") Long shopId);

    /**
     * 获取店铺信息及扩展信息
     * @param shopIds 店铺ids
     * @param shopName 店铺名称
     * @return 店铺信息列表
     */
    List<ShopDetailVO> getShopDetailByShopIdsShopName(@Param("shopIds") List<Long> shopIds, @Param("shopName") String shopName);

    /**
     *    根据店铺id获取店铺扩展信息
     * @param shopId 店铺id
     * @return 店铺扩展信息
     */
    ShopDetailVO getShoExtensionsByShopId(Long shopId);

    /**
     * 根据手机号获取存在店铺的数量
     * @param mobile 手机号
     * @return 数量
     */
    Integer countByMobile(String mobile);

    /**
     * 根据店铺状态查询店铺数量
     * @param shopStatus
     * @return
     */
    Long countByShopStatus(@Param("shopStatus") Integer shopStatus);

    /**
     * 根据签约时间修改店铺状态
     * @param now
     */
    void changeShopStatusByContractTime(@Param("now") Date now);

    /**
     * 获取状态需要改变的店铺id列表
     * @param now
     * @return
     */
    List<Long> listShopIdsOfStatusChangeByContractTime(@Param("now") Date now);

    /**
     * 根据当前时间获取状态需要改变为停业状态的店铺id列表
     * @param now
     * @return
     */
    List<Long> listShopIdsOfStatusChangeToStopByContractTime(@Param("now") Date now);

    /**
     * 根据当前时间获取状态需要改变为营业状态的店铺id列表
     * @param now
     * @return
     */
    List<Long> listShopIdsOfStatusChangeToOpenByContractTime(@Param("now") Date now);


    /**
     * 根据参数获取店铺id列表
     * @param shopSimpleBO
     * @return
     */
    List<ShopSimpleBO> listSimple(@Param("shopSimpleBO") ShopSimpleBO shopSimpleBO);

    /**
     * 根据店铺状态获取店铺id列表
     * @param shopStatus
     * @return
     */
    List<Long> getShopIdsByShopStatus(@Param("shopStatus")Integer shopStatus);

    /**
     * 根据店铺名称模糊查询id
     * @param name
     * @return
     */
    List<Long> selectShopIdsLikeName(@Param("name") String name);

    /**
     * 平台分页获取装修的店铺信息
     * @param shopSearchDTO
     * @return
     */
    List<ShopHeadInfoVO> searchShops(@Param("shopSearchDTO") ShopSearchDTO shopSearchDTO);

    /**
     * 用户分页获取装修的店铺信息
     * @param shopSearchDTO
     * @return
     */
    List<ShopHeadInfoVO> apiSearchShops(@Param("shopSearchDTO") ShopSearchDTO shopSearchDTO);

    /**
     * 店铺列表（营业、停业状态）
     *
     * @param shopSearchDTO
     * @return
     */
    List<ShopHeadInfoVO> listRenovationShop(@Param("shopSearchDTO") ShopSearchDTO shopSearchDTO);

    /**
     * 根据地区分组获取店铺数量
     * @return
     */
    List<Map<String,Object>> group_area_count(@Param("cateId") Long cateId);

    /**
     * 根据地区ID 和级别查询商家名称列表
     * @param areaId
     * @param level
     * @return
     */
    List<String> getShopNameByArea(@Param("areaId")Long areaId,@Param("level")Integer level);
}
